function move(obj, attr, target, speed, callback) {

    clearInterval(obj.timer);

    var current = parseInt(getStyle(obj, attr));

    if (current > target) {
        speed = -speed
    }

    obj.timer = setInterval(function () {

        var oldValue = parseInt(getStyle(obj, attr));

        var newValue = oldValue + speed;

        if ((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
            newValue = target;
        }

        obj.style[attr] = newValue + "px";

        if (newValue == target) {
            clearInterval(obj.timer);

            callback && callback();
        }

    }, 30);

}


function getStyle(obj, name) {
    if (window.getComputedStyle) {
        return getComputedStyle(obj, null)[name];
    } else {
        return obj.currentStyle[name];
    }
}


/*定义一个函数，用来向一个元素中添加指定的class属性值
        *    参数：
        *        1-obj,要添加class属性的元素
        *        2-cn,要添加class值
        */
function addClass(obj, cn) {

    if (!hasClass(obj, cn)) {
        obj.className += " " + cn;
    }
}


/*定义一个函数，用来判断一个元素中是否含有指定的class属性值
*     参数：
*        1-obj,要添加class属性的元素
*        2-cn,要添加class值
*如果有返回true，没有返回false
*/
function hasClass(obj, cn) {

    var reg = new RegExp("\\b" + cn + "\\b");

    return reg.test(obj.className);
}


/*定义一个函数，用来删除一个元素中的指定的class属性*/
function removeClass(obj, cn) {

    var reg = new RegExp("\\b" + cn + "\\b");

    //删除class
    obj.className = obj.className.replace(reg, "");

}


/*定义一个函数，用来切换一个类
*如果元素中有该类，则删除
*如果没有该类，则添加
*/
function toggleClass(obj, cn) {
    if (hasClass(obj, cn)) {
        removeClass(obj, cn);
    } else {
        addClass(obj, cn);
    }
}